﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using EGuayas.Web.Usuario;
using EntGuayasSLA.BL.Licenciamiento;

namespace EGuayas.Web.Usuario
{
    public partial class pgConsultor : pgBase
    {
        #region Set-Session
        /// <summary>
        /// Lista de documentos al crear nuevo promotor
        /// </summary>
        protected ItemLista ListaDoc
        {
            get
            {
                return ((ItemLista)Session[SessionPage.PageUserAdm + "_pgPromotorLista1"]);
            }
            set
            {
                Session[SessionPage.PageUserAdm + "_pgPromotorLista1"] = value;
            }
        }
        #endregion Set-Session

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                
                if (!X.IsAjaxRequest)
                {
                    string idPageSessionUnique = Request["idPage"];
                    string idConsultor = Request["idx1"];
                    string idUsuario  = Request["idx2"];
                    this.hddIdPageSession.SetValue(idPageSessionUnique);
                    this.hddIdPersonaTmp.SetValue(idConsultor);
                    this.frmGeneral.Reset();
                    //
                    stoTipoOrganizacion.DataSource = ItemLista.GetItemListaCodigo(Valores.Catalogo_Cod_Nacionalidad, "S");
                    stoTipoOrganizacion.DataBind();

                    if (idUsuario == null)
                    {
                        idUsuario = GetSessionUsuario.UsuarioId;
                    }
                    if (idConsultor != null & idUsuario != null)
                    {


                        Consultor objConsultor = Consultor.GetEditableRoot(Guid.Parse(idConsultor));
                        ValueFormConsultor objVal = new ValueFormConsultor(objConsultor.Id.ToString(),Valores.PageEvento_Lectura);
                        string opc   = (objConsultor.Ruc != "") ? "PJ" : "PN";

                        Boolean read = (GetSessionPage.GetSession(idPageSessionUnique) != Valores.PageEvento_Modificar) ? true : false;
                        Parroquia objParroquia = Parroquia.GetEditableRoot(Guid.Parse(objConsultor.ParroquiaId));
                        objVal.IdUser = idUsuario;
                        objVal.Identificacion = objConsultor.Identificacion;
                        objVal.Nombre=objConsultor.Nombre;
                        objVal.Apellido=objConsultor.Apellido;
                        objVal.Email=objConsultor.Email;
                        objVal.Direccion=objConsultor.Direccion;
                        objVal.Provincia = objParroquia.ProvinciaId;                       
                        objVal.Canton=objParroquia.CantonId;                      
                        objVal.Parroquia=objConsultor.ParroquiaId;                    
                        objVal.Ruc=objConsultor.Ruc;
                        objVal.Razonsocial=objConsultor.RazonSocial;
                        this.hddIdPersonaTmp.SetValue(objConsultor.PersonaId);
                        Usuarios user =Usuarios.GetEditableRoot(idUsuario);                      
                        objVal.Login=user.Login;
                        objVal.password1=user.Clave;
                        objVal.password2=user.Clave;
                       
                        objVal.numDoc = "1";
                      

                        X.Js.Call("pgFn.UpdatePanelSelectCbbPersona", opc, read);
                        X.Js.Call("AppUser.Persona.SetLocalidad", "wuc_persona", objParroquia.ProvinciaId, objParroquia.CantonId, objParroquia.Id, objConsultor.Nacionalidad, true);
                        this.frmGeneral.SetValues(objVal);
                      
                    }
                     if (idPageSessionUnique != null)
                    {
                    switch (GetSessionPage.GetSession(idPageSessionUnique))
                    {
                        case Valores.PageEvento_Eliminar:                         
                            this.btnModificar.Hide();
                            this.btnSaveForm.Hide();
                            this.btnEliminar.Show();
                            X.Js.Call("pgFn.CollapsePanels",true);
                            break;
                        
                        case Valores.PageEvento_Lectura:                         
                            this.btnModificar.Hide();
                            this.btnSaveForm.Hide();
                            this.btnEliminar.Hide();
                            X.Js.Call("pgFn.CollapsePanels",true);
                            break;

                        case Valores.PageEvento_Modificar:                          
                            this.btnModificar.Show();                                              
                            this.btnSaveForm.Hide();
                            this.btnEliminar.Hide();
                            X.Js.Call("pgFn.UpdatePanelError");
                            break;
                        default:

                            SetSessionPage setSession = new SetSessionPage(idPageSessionUnique, Valores.PageEvento_Nuevo);
                            
                            this.btnSaveForm.Show();
                            this.btnModificar.Hide();
                            this.btnEliminar.Hide();
                            break;
                       }
                     }
                     else
                     {
                         SetSessionPage setSession = new SetSessionPage(idPageSessionUnique, Valores.PageEvento_Nuevo);

                         this.btnSaveForm.Show();
                         this.btnModificar.Hide();
                         this.btnEliminar.Hide();


                     }

                }

            }
            catch (Exception ex)
            {
                this.btnSaveForm.Hide();
                this.btnModificar.Hide();
                this.btnEliminar.Hide();
                RegistrarLog(ex);
            }
        }
             
       
        /// <summary>
        /// Evento Modificar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ModificarClick(object sender, DirectEventArgs e)
        {
            try
            {

                string gridJson = e.ExtraParams["prmValues"];
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);
                Guid Id = Guid.Parse(dataItem["Id"]);

                Consultor objConsultor = Consultor.GetEditableRoot(Id);
                objConsultor.Identificacion = dataItem["Identificacion"];
                objConsultor.Nombre = dataItem["Nombre"];
                objConsultor.Apellido = dataItem["Apellido"];
                objConsultor.Direccion = dataItem["Direccion"];
                objConsultor.Email = dataItem["Email"];
                objConsultor.Ruc = dataItem["Ruc"];
                objConsultor.RazonSocial = dataItem["Razonsocial"];
             
                Usuarios objUsuario = Usuarios.GetEditableRoot(dataItem["IdUser"]);
                objUsuario.Login = dataItem["Login"];
                objUsuario.Clave = Seguridad.Encriptar(dataItem["password1"]);
             
                objConsultor.Save();
                 
                objUsuario.Save();
                btnModificar.Disable();

                X.Js.Call("pgFn.ViewGrid", "Consultor modificado");
            
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        /// <summary>
        /// Crear wuc delegado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void PanelDelegadoAdd(object sender, ComponentAddedEventArgs e)
        {
            try{
            if (X.IsAjaxRequest)
            {
                return;
            }
            Ext.Net.FormPanel pnl = (Ext.Net.FormPanel)e.Control;
            pnl.Title  = "Datos de Delegado";
            pnl.Icon   = Icon.UserOrange;
            pnl.Hidden = true;
            pnl.Listeners.BeforeRender.Handler = "AppUser.Persona.SetFormName('delegado',this);";
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        /// <summary>
        /// Crear un nuevo promotor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void SaveClick(object sender, DirectEventArgs e)
        {
            try
            {
                
                string gridJson = e.ExtraParams["prmValues"];
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);
                var listaRoles = RolLista.GetRolLista();
                var infoRol = listaRoles.FirstOrDefault(r => r.Codigo == Valores.Codigo_Rol_Consultor);


                Consultor objConsultor = Consultor.NewEditableRoot();
                objConsultor.Id = System.Guid.NewGuid();
                objConsultor.PersonaId = System.Guid.NewGuid().ToString();
                objConsultor.Identificacion = dataItem["Identificacion"];
                objConsultor.Nombre = dataItem["Nombre"];
                objConsultor.Apellido = dataItem["Apellido"];
                objConsultor.Direccion = dataItem["Direccion"];
                objConsultor.Email = dataItem["Email"];
                objConsultor.Ruc = dataItem["Ruc"];
                objConsultor.RazonSocial = dataItem["Razonsocial"];
               
                objConsultor.ParroquiaId = dataItem["Parroquia"];
                objConsultor.Nacionalidad = dataItem["Nacionalidad"];
              
                objConsultor.CodigoMAE = dataItem["CodigoMae"];
                Usuarios objUsuario= Usuarios.NewEditableRoot();
                objUsuario.Id = System.Guid.NewGuid();
                objUsuario.PersonaId = objConsultor.PersonaId;
                objUsuario.Login = dataItem["Login"];
                objUsuario.Clave = Seguridad.Encriptar(dataItem["password1"]);
                objUsuario.RolId = infoRol.Id.ToString();
                objUsuario.FechaCreacion = DateTime.Now;

                objUsuario.Estado = Valores.Codigo_Estado_Activo;
               
               
                objConsultor.Save();
                objUsuario.Save();
                foreach (var item in  ListaDoc)
                {
                    Documentos objDoc= Documentos.NewEditableRoot();
                    objDoc.Id = System.Guid.NewGuid();
                    objDoc.ArchivoId=item.ArchivoId;
                    objDoc.Tipo=item.Id.ToString();
                    objDoc.PersonaId=objConsultor.PersonaId;
                    objDoc.Save();
                }
               
                btnSaveForm.Disable();
                X.Js.Call("pgFn.CloseWinNew", objConsultor.Identificacion);
               
               
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
               
            }
        }
        /// <summary>
        /// Eliminar promotor
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void EliminarClick(object sender, DirectEventArgs e)
        {
            try
            {
                string gridJson = e.ExtraParams["prmValues"];
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);
                Guid Id = Guid.Parse(dataItem["Id"]);
                Promotores objConsultor= Promotores.GetEditableRoot(Id);

                Usuarios objUsuario = Usuarios.GetEditableRoot(dataItem["IdUser"]);
                objUsuario.Delete();
                objUsuario.Save();
                //
                int nCount = 0;
                
                wucDocUser obj = (wucDocUser)this.uc_doc_U001.UserControls[0];
                obj.DeleteAllFiles(ArchivoLista.GetArchivoLista(objConsultor.PersonaId, out nCount));


                objConsultor.Delete();
                objConsultor.Save();
                btnEliminar.Disable();
                X.Js.Call("pgFn.ViewGrid", "Consultor creado");
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);

            }
        }
        private void SendMail(Usuarios objUsuario,string mail)
        {
            try
            {
            string sTxtMail = string.Format("Estimado usuario.<br/>  ");
            sTxtMail += string.Format("<b><a href=\"{0}Usuario/pgValidaCorreo.aspx?idu={1}\">Ingrese aqui para validar su correo electronico</a></b>", ConfigurationManager.AppSettings.Get("Url"),objUsuario.Id);
            MyMail.Enviar("", mail, "Validación de correo electrónico", sTxtMail, true, "Notificación correo validación");
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        private void SendMail(Promotores objPromotor)
        {
            try{
            string sTxtMail = string.Format("Buen día Sr(a) {0} {1}:<br/>{2}", objPromotor.Nombre, objPromotor.Apellido, "Se le comunica de manera más comedida que se require que se modifique los archivos que a continuación se listan, con el proposito de <b>ACTIVAR</b> usuario que le corresponde.<br/>");

            MyMail.Enviar("", objPromotor.Email, "Notificación archivos para activación de usuario", sTxtMail, true, "Notificación bloque de archivos promotor modificados");
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        #region OnComponentAdded
        protected void OnDocUserAdded(object sender, ComponentAddedEventArgs e)
        {
            try{
            string idPageSessionUnique = Request["idPage"];
            Ext.Net.Panel panel = (Ext.Net.Panel)e.Control;
            SetCustomConfigWucPage(panel, idPageSessionUnique);
            SetCustomConfig(panel, panel.Parent.ID + "idPers", Request["idx1"]);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
           
        }
        protected void OnCuentaAdded(object sender, ComponentAddedEventArgs e)
        {
            try{
            string idPageSessionUnique = Request["idPage"];
            Ext.Net.FormPanel panel = (Ext.Net.FormPanel)e.Control;
            SetCustomConfigWucPage(panel, idPageSessionUnique);
            SetCustomConfig(panel, panel.Parent.ID + "idPers", Request["idx1"]);
             }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }
        protected void OnPersonaAdded(object sender, ComponentAddedEventArgs e)
        {
            try
            {
            string idPageSessionUnique = Request["idPage"];
            Ext.Net.FormPanel panel = (Ext.Net.FormPanel)e.Control;
            SetCustomConfigWucPage(panel, idPageSessionUnique);
            SetCustomConfig(panel, panel.Parent.ID + "idPers", Request["idx1"]);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }
        #endregion
      
     
    }
    class ValueFormConsultor
    {
        public string Evento { get; set; }
        public string CodigoMae { get; set; }
        public string IdUser { get; set; }
        public string Id { get; set; }
        public string Identificacion { get; set; }
        public string Nombre { get;  set; }
        public string Apellido { get;  set; }
        public string Email { get;  set; }
        public string Direccion { get;  set; }
        public string Provincia { get;  set; }
        public object[] _Provincia_state { get; set; }
        public string Canton { get;  set; }
        public string _Canton_state { get;  set; }
        public string Parroquia { get;  set; }
        public object[] _Parroquia_state { get; set; }
        public object[] _cbxTipoPersona_state { get; set; }
        public string Nacionalidad { get; set; }       
        //
        public string Id_delegado { get; set; }
        public string Identificacion_delegado { get; set; }
        public string Nombre_delegado { get; set; }
        public string Apellido_delegado { get; set; }
        public string Email_delegado { get; set; }
        public string Direccion_delegado { get; set; }
        public string Provincia_delegado { get; set; }
        public object[] _Provincia_state_delegado { get; set; }
        public string Canton_delegado { get; set; }
        public string _Canton_state_delegado { get; set; }
        public string Parroquia_delegado { get; set; }
        public object[] _Parroquia_state_delegado { get; set; }
        public string Nacionalidad_delegado { get; set; }
        //
        public string Ruc { get;  set; }
        public string Razonsocial { get;  set; }
        public string RepresentanteLegal { get;  set; }
        public string Telefono { get;  set; }
        public string TelefonoCelular { get;  set; }
        public string Fax { get;  set; }
        public string Login { get;  set; }
        public string password1 { get;  set; }
        public string password2 { get; set; }
        public string numDoc { get;  set; }

        public ValueFormConsultor(string _id,string _evt)
        {
          
            Id = _id;
            Evento = _evt;
        }

    }
}